From c440ab239b70e2fa699d54905684540c72c6a3ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 2 Nov 2014 12:10:32 +0000 Subject: [PATCH 1/9] doc changes --- docs/{doxygen.rc => doxfull.rc} | 0 docs/{doxygens.rc => doxsmall.rc} | 15 +-- packages/ProbLog/problog.yap | 39 ++++-- packages/myddas/pl/myddas.ypp | 124 ++++++++++-------- pl/boot.yap | 201 +++++++++++++++--------------- pl/modules.yap | 34 +++++ 6 files changed, 245 insertions(+), 168 deletions(-) rename docs/{doxygen.rc => doxfull.rc} (100%) rename docs/{doxygens.rc => doxsmall.rc} (99%) diff --git a/docs/doxygen.rc b/docs/doxfull.rc similarity index 100% rename from docs/doxygen.rc rename to docs/doxfull.rc diff --git a/docs/doxygens.rc b/docs/doxsmall.rc similarity index 99% rename from docs/doxygens.rc rename to docs/doxsmall.rc index 63fc64912..16d6f0734 100644 --- a/docs/doxygens.rc +++ b/docs/doxsmall.rc @@ -367,7 +367,7 @@ SUBGROUPING = YES # SEPARATE_MEMBER_PAGES. # The default value is: NO. -INLINE_GROUPED_CLASSES = NO +INLINE_GROUPED_CLASSES = YES # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in @@ -551,7 +551,7 @@ SORT_MEMBER_DOCS = YES # this will also influence the order of the classes in the class list. # The default value is: NO. -SORT_BRIEF_DOCS = NO +SORT_BRIEF_DOCS = YES # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and @@ -563,7 +563,7 @@ SORT_BRIEF_DOCS = NO # detailed member documentation. # The default value is: NO. -SORT_MEMBERS_CTORS_1ST = NO +SORT_MEMBERS_CTORS_1ST = yes # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will @@ -655,7 +655,7 @@ SHOW_FILES = YES # Folder Tree View (if specified). # The default value is: YES. -SHOW_NAMESPACES = NO +SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from @@ -770,7 +770,6 @@ WARN_LOGFILE = #INPUT = /Users/vsc/git/yap-6.3/packages/R/R.pl INPUT = foreigns.yap docs/yap.md pl swi C H include os packages library CXX OPTYap - # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -1602,7 +1601,7 @@ MAKEINDEX_CMD_NAME = makeindex # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -COMPACT_LATEX = NO +COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used by the # printer. @@ -1723,7 +1722,9 @@ GENERATE_RTF = NO # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: rtf. -# This tag requires that the tag GENERATE_RTF is set to YES. +# This tag requires that the tag GENERATE_RTb + +F is set to YES. RTF_OUTPUT = rtf diff --git a/packages/ProbLog/problog.yap b/packages/ProbLog/problog.yap index 056e42969..1be1b8c3d 100644 --- a/packages/ProbLog/problog.yap +++ b/packages/ProbLog/problog.yap @@ -252,7 +252,7 @@ You can also use the CUDD interface package in YAP. You will need to 2. If a Mac user, there is a ports package. -3 Otherwise, you can obtain the version at . This version compiles under WIN32. +3. Otherwise, you can obtain the version at . This version compiles under WIN32. Last, when you configure YAP you need to add the options --with-cidd --enable-bddlib. Binary distributed versions already have the interface. @@ -291,8 +291,10 @@ Instead of probabilities every fact has a t( ) prefix. The t stands for tunable ~~~~ t(0.5)::heads(_). ~~~~ +*/ -### ProbLog Predicates +/** @defgroup ProbLogPredicates ProbLog Predicates +@ingroup ProbLog1 This chapter describes the predicates defined by ProbLog for evaluating the probability of queries. @@ -347,8 +349,12 @@ This predicate returns the lower and upper bound of the probability of achieving This predicate returns the lower bound of the probability of achieving the goal G obtained by cutting the sld tree at the given probability for each branch. */ +%% @} + /** -### ProbLog Parameter Learning Predicates +@defgroup ProbLogParameterLearning ProbLog Parameter Learning Predicates +@ingroup ProbLog1 +@{ */ /** @@ -371,7 +377,7 @@ Test examples are ignored during learning but are used afterwards to check the p * @pred do_learning(+N). * Starts the learning algorithm with N iterations. -paragraph{} + */ /** @@ -381,7 +387,15 @@ The output is created in the output subfolder of the current folder where YAP wa Starts the learning algorithm. The learning will stop after N iterations or if the difference of the Mean Squared Error (MSE) between two iterations gets smaller than Epsilon - depending on what happens first. -### Miscelaneous +*/ + +%% @} + + +/** @defgroup ProbLogMiscellaneous ProbLog Miscellaneous Predicates +@ingroup ProbLog1 +@{ + Both the learning and the inference module have various parameters, or flags, that can be adjusted by the user. The following predicates are defined by ProbLog to access and set these flags. @@ -395,11 +409,9 @@ This predicate lists all the flags name, value, domain and description. */ -/** - * @pred problog_flag(+Name, -Value) - * -This predicate gives the value of the flag with the specified name. The supported flags are: +/** @pred problog_flag(+Name, -Value) +This predicate gives the value of the flag with the specified name. The supported flags are: + use_db_trie @@ -461,7 +473,7 @@ The possible values for this flag are true or false. Flag that sets the representation of the ancestor list. The possible values for this flag are list or integer -+ max\cccccccccccc_depth ++ max_depth Sets the maximum proof depth. The possible values for this flag are any integer. @@ -478,8 +490,7 @@ The possible values for this flag are any integer greater than zero. + min_mc_samples - Flag related to Monte Carlo Sampling that sets the minimum number of samples before convergence. -The possible values for this flag are any integer greater than or equal to zero. + Flag related to Monte Carlo Sampling that sets the minimum number of samples before convergence. The possible values for this flag are any integer greater than or equal to zero. + max_mc_samples @@ -591,6 +602,8 @@ The possible values for this flag are true or false. Flag telling the location of the output files directory. The possible values for this flag are any valid directory name. +*/ + /** @pred set_problog_flag(+Name, +Value) the predicate sets the value of the given flag. The supported flags are the ones listed in above @@ -601,7 +614,7 @@ the predicate sets the value of the given flag. The supported flags are the ones the predicate sets the value of the given flag. The supported flags are the ones listed in above */ -/** @pred learning_flag(+Name, -Value)} +/** @pred learning_flag(+Name, -Value) This predicate gives the value of the learning flag with the specified name. The supported flags are: diff --git a/packages/myddas/pl/myddas.ypp b/packages/myddas/pl/myddas.ypp index dd21cc014..60036f035 100644 --- a/packages/myddas/pl/myddas.ypp +++ b/packages/myddas/pl/myddas.ypp @@ -146,10 +146,11 @@ statistics from the MYDDAS system; This option is only available in MySQL. It enables the option to interact with the MySQL server in two different ways. As if we were on the MySQL Client Shell, and as if we were using Datalog. -@} */ +%% @} + /** @defgroup MYDDAS_Architecture MYDDAS Architecture @ingroup MYDDAS @{ @@ -202,15 +203,18 @@ FROM 'phonebook' A WHERE A.Name = 'John Doe'; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -@} - - */ +%% @} + + /** @defgroup View_Level_Interface View Level Interface @ingroup MYDDAS @{ +*/ + +/** @pred db view(+,+,+). @@ -302,16 +306,17 @@ FROM Edge A WHERE A.attr1 = 10; To know how to use db `view/3`, please refer to Draxler's Prolog to SQL Compiler Manual. -@} - - */ +%% @} + /** @defgroup Accessing_Tables_in_Data_Sources_Using_SQL Accessing Tables in Data Sources Using SQL @ingroup MYDDAS @{ - @pred db_sql(+,+,?). +*/ + +/** @pred db_sql(+,+,?). @@ -336,12 +341,17 @@ Example: LA = ['D','John Doe',123456789] ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -@section Insertion_of_Rows Insertion of Rows +*/ - @pred db_assert(+,+). +%% @} +/** @defgroup Insertion_of_Rows Insertion of Rows +@ingroup MYDDAS +@{ +*/ +/** @pred db_assert(+,+). @pred db_assert(+). @@ -385,10 +395,9 @@ yes Would insert the row: `A,null value,31` into the relation `Hello World`, assuming that the second row allows null values. - @pred db insert(+,+,+). - - +*/ +/** @pred db insert(+,+,+). @pred db insert(+,+). @@ -412,15 +421,17 @@ yes yes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -@} - */ +%% @} + /** @defgroup Types_of_Attributes Types of AttributesL @ingroup MYDDAS @{ - @pred db_get_attributes_types(+,+,?). +*/ + +/** @pred db_get_attributes_types(+,+,?). @@ -448,20 +459,18 @@ yes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ where Hello World is the name of the relation and myddas is the connection identifier. - - -@} - */ +%% @} + + /** @defgroup Number_of_Fields Number of Fields @ingroup MYDDAS @{ - @pred db_number_of_fields(+,?). - - +*/ +/** @pred db_number_of_fields(+,?). @pred db_number_of_fields(+,+,?). @@ -486,18 +495,18 @@ where `Hello World` is the name of the relation and `myddas` is the connection identifier. -@} - */ +%% @} + + /** @defgroup Describing_a_Relation Describing a Relation @ingroup MYDDAS @{ - @pred db_datalog_describe(+,+). - - +*/ +/** @pred db_datalog_describe(+,+). @pred db_datalog_describe(+). @@ -518,7 +527,9 @@ command, the same way as `DESCRIBE` in the MySQL prompt would. yes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - @pred db_describe(+,+). +*/ + +/** @pred db_describe(+,+). @@ -538,15 +549,17 @@ no ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -@} - */ +%% @} + /** @defgroup Enumerating_Relations Enumeration Relations Describing_a_Relation Describing a Relation @ingroup MYDDAS @{ - @pred db_datalog_show_tables(+). +*/ + +/** @pred db_datalog_show_tables(+). @pred db_datalog_show_tables @@ -565,7 +578,9 @@ it does not returns any value, but instead prints to the screen the result of th yes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - @pred db_show_tables(+, ?). +*/ + +/** @pred db_show_tables(+, ?). @@ -584,19 +599,19 @@ Table = table('Hello World') ? ; no ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -@} - */ +%%@} + + /** @defgroup The_MYDDAS_MySQL_Top_Level The MYDDAS MySQL Top Level @ingroup MYDDAS @{ +*/ +/** @pred db_top_level(+,+,+,+,+). - - - @pred db_top_level(+,+,+,+). @@ -644,18 +659,19 @@ Bye yes ?- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -@} - */ +%%@} + + /** @defgroup Other_MYDDAS_Properties Other MYDDAS Properties @ingroup MYDDAS @{ +*/ - - @pred db_verbose(+). - @pred db_top_level(+,+,+,+). +/** +@pred db_verbose(+). When we ask a question to YAP, using a predicate asserted by @@ -670,8 +686,16 @@ yes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If we want to disable this feature, we must call the `db_verbose/1` predicate with the value 0. +\ +*/ - @pred db_module(?). +/** + @pred db_top_level(+,+,+,+). + + +*/ + +/** @pred db_module(?). @@ -707,11 +731,9 @@ yes ?- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - @pred db_my_result_set(?). - - - +*/ +/** @pred db_my_result_set(?). The MySQL C API permits two modes for transferring the data generated by a query to the client, in our case YAP. The first mode, and the default @@ -736,7 +758,9 @@ After this command, all of the database predicates will use use result by default. We can change this by doing again `db_my_result_set(store_result)`. - @pred db_my_sql_mode(+Conn,?SQL_Mode). +*/ + +/** @pred db_my_sql_mode(+Conn,?SQL_Mode). @@ -758,6 +782,8 @@ You can see the available SQL Modes at the MySQL homepage at */ +%% @} + #ifdef MYDDAS_TOP_LEVEL :- use_module(myddas_top_level,[ db_top_level/4, diff --git a/pl/boot.yap b/pl/boot.yap index 023199a56..0bbfea87e 100644 --- a/pl/boot.yap +++ b/pl/boot.yap @@ -15,7 +15,7 @@ * * *************************************************************************/ -/** +/** @defgroup YAPControl Control Predicates @ingroup YAPBuiltins @@ -24,25 +24,8 @@ */ -/** @pred :_P_ , :_Q_ is iso - - -Conjunction of goals (and). - -Example: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - p(X) :- q(X), r(X). -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -should be read as "p( _X_) if q( _X_) and r( _X_)". - - -*/ - -/** @pred :_P_ ; :_Q_ is iso - +/** @pred :_P_ ; :_Q_ is iso Disjunction of goals (or). Example: @@ -52,11 +35,11 @@ Example: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ should be read as "p( _X_) if q( _X_) or r( _X_)". - + */ -/** @pred \+ :_P_ is iso - +/** @pred \+ :_P_ is iso +Negation by failure. Goal _P_ is not provable. The execution of this predicate fails if and only if the goal _P_ finitely succeeds. It is not a true logical @@ -65,17 +48,24 @@ negation, which is impossible in standard Prolog, but This predicate might be defined as: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~ \+(P) :- P, !, fail. \+(_). -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~ if _P_ did not include "cuts". - +If _P_ includes cuts, the cuts are defined to be scoped by _P_: they canno cut over the calling prredicate. + + ~~~~~~~~~~~~ + go(P). + :- \+ P, !, fail. + \+(_). + ~~~~~~~~~~~~ + */ -/** @pred not :_P_ +/** @pred not :_P_ Goal _P_ is not provable. The same as `\+ _P_`. @@ -84,12 +74,12 @@ This predicate is kept for compatibility with C-Prolog and previous versions of YAP. Uses of not/1 should be replaced by `\+`/1, as YAP does not implement true negation. - + */ -/** @pred :_P_ -> :_Q_ is iso +/** @pred :_Condition__ -> :_Action_ is iso Read as "if-then-else" or "commit". This operator is similar to the @@ -134,26 +124,31 @@ Note also that you can use chains of commit operators like: Note that `(->)/2` does not affect the scope of cuts in its arguments. - + */ -/** @pred :_Condition_ *-> :_Action_ +/** @pred :_Condition_ *-> :_Action_ is iso This construct implements the so-called soft-cut. The control is -defined as follows: If _Condition_ succeeds at least once, the -semantics is the same as ( _Condition_, _Action_). If +defined as follows: + + If _Condition_ succeeds at least once, the +semantics is the same as ( _Condition_, _Action_). + + + If _Condition_ does not succeed, the semantics is that of (\\+ - _Condition_, _Else_). In other words, If _Condition_ + _Condition_, _Else_). + + In other words, if _Condition_ succeeds at least once, simply behave as the conjunction of _Condition_ and _Action_, otherwise execute _Else_. The construct _A *-> B_, i.e. without an _Else_ branch, is translated as the normal conjunction _A_, _B_. - + */ -/** @pred ! is iso +/** @pred ! is iso Read as "cut". Cuts any choices taken in the current procedure. @@ -184,7 +179,7 @@ definition: member(X,[_|L]) :- member(X,L). ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -the same query would return only the first element of the +the same query would return only the first element of the list, since backtracking could not "pass through" the cut. */ @@ -219,11 +214,7 @@ private(_). % % boootstrap predicates. % -:- system_module( '$_boot', [(*->)/2, - (',')/2, - (->)/2, - (;)/2, - (\+)/1, +:- system_module( '$_boot', [ bootstrap/1, call/1, catch/3, @@ -234,8 +225,7 @@ private(_). (not)/1, repeat/0, throw/1, - true/0, - ('|')/2], ['$$compile'/4, + true/0], ['$$compile'/4, '$call'/4, '$catch'/3, '$check_callable'/2, @@ -299,12 +289,13 @@ private(_). % % % -/** @pred true is iso +/** @pred true is iso +Succeed. Succeeds once. - + */ true :- true. @@ -385,7 +376,7 @@ true :- true. '$init_globals' :- % '$swi_set_prolog_flag'(break_level, 0), - % '$set_read_error_handler'(error), let the user do that + % '$set_read_error_handler'(error), let the user do that nb_setval('$chr_toplevel_show_store',false). '$init_consult' :- @@ -458,15 +449,15 @@ true :- true. '$system_catch'('$raw_read'(user_input, Line), prolog, E, (print_message(error, E), '$handle_toplevel_error'(Line, E))), - ( + ( '$pred_exists'(rl_add_history(_), user) - -> + -> format(atom(CompleteLine), '~W~W', [ Line, [partial(true)], '.', [partial(true)] ]), user:rl_add_history(CompleteLine) - ; + ; true ), '$system_catch'( @@ -524,15 +515,15 @@ true :- true. ( BreakLevel \= 0 -> true ; '$pred_exists'(halt(_), user) -> halt(0) ; '$halt'(0) ). - '$erase_sets' :- + '$erase_sets' :- eraseall('$'), eraseall('$$set'), - eraseall('$$one'), + eraseall('$$one'), eraseall('$reconsulted'), fail. '$erase_sets' :- \+ recorded('$path',_,_), recorda('$path',"",_). '$erase_sets'. - '$version' :- + '$version' :- get_value('$version_name',VersionName), print_message(help, version(VersionName)), get_value('$myddas_version_name',MYDDASVersionName), @@ -545,7 +536,7 @@ true :- true. fail. '$version'. -/** @pred repeat is iso +/** @pred repeat is iso Succeeds repeatedly. In the next example, `repeat` is used as an efficient way to implement @@ -567,7 +558,7 @@ The built-in `repeat/0` could be defined in Prolog by: The predicate between/3 can be used to iterate for a pre-defined number of steps. - + */ repeat :- '$repeat'. @@ -582,7 +573,7 @@ number of steps. '$repeat'. '$repeat' :- '$repeat'. -'$start_corouts' :- +'$start_corouts' :- eraseall('$corout'), eraseall('$result'), eraseall('$actual'), @@ -595,7 +586,7 @@ number of steps. '$access_yap_flags'(9,1), !, '$execute_command'(C,VL,Pos,Con,C). '$command'(C,VL,Pos,Con) :- - ( (Con = top ; var(C) ; C = [_|_]) -> + ( (Con = top ; var(C) ; C = [_|_]) -> '$execute_command'(C,VL,Pos,Con,C), ! ; % do term expansion expand_term(C, EC), @@ -614,7 +605,7 @@ number of steps. '$execute_commands'([C|Cs],VL,Pos,Con,Source) :- !, ( '$system_catch'('$execute_command'(C,VL,Pos,Con,C),prolog,Error,user:'$LoopError'(Error, Con)), - fail + fail ; '$execute_commands'(Cs,VL,Pos,Con,Source) ). @@ -637,7 +628,7 @@ number of steps. \+ '$if_directive'(Command), !. '$execute_command'((:-G),VL,Pos,Option,_) :- -% !, +% !, Option \= top, !, '$current_module'(M), % allow user expansion @@ -661,7 +652,7 @@ number of steps. % ISO only wants directives in files % SICStus accepts everything in files % YAP accepts everything everywhere - % + % '$process_directive'(G, top, M, VL, Pos) :- '$access_yap_flags'(8, 0), !, % YAP mode, go in and do it, '$process_directive'(G, consult, M, VL, Pos). @@ -723,13 +714,13 @@ number of steps. '$go_compile_clause'(G,Vs,Pos,N,Source) :- '$current_module'(Mod), '$go_compile_clause'(G,Vs,Pos,N,Mod,Mod,Mod,Source). - + '$go_compile_clause'(G,_Vs,_Pos,_N,_HM,_BM,_SM,Source) :- var(G), !, - '$do_error'(instantiation_error,assert(Source)). + '$do_error'(instantiation_error,assert(Source)). '$go_compile_clause'((G:-_),_Vs,_Pos,_N,_HM,_BM,_SM,Source) :- var(G), !, - '$do_error'(instantiation_error,assert(Source)). + '$do_error'(instantiation_error,assert(Source)). '$go_compile_clause'(M:G,Vs,Pos,N,_,_,SourceMod,Source) :- !, '$go_compile_clause'(G,Vs,Pos,N,M,M,M,Source). '$go_compile_clause'((M:H :- B),Vs,Pos,N,_,BodyMod,SourceMod,Source) :- !, @@ -773,13 +764,13 @@ number of steps. '$not_imported'(_, _). -'$check_if_reconsulted'(N,A) :- - once(recorded('$reconsulted',N/A,_)), - recorded('$reconsulted',X,_), - ( X = N/A , !; - X = '$', !, fail; - fail - ). +'$check_if_reconsulted'(N,A) :- + once(recorded('$reconsulted',N/A,_)), + recorded('$reconsulted',X,_), + ( X = N/A , !; + X = '$', !, fail; + fail + ). '$inform_as_reconsulted'(N,A) :- recorda('$reconsulted',N/A,_). @@ -810,7 +801,7 @@ number of steps. '$write_answer'(NV, LGs, Written), '$write_query_answer_true'(Written), ( - '$prompt_alternatives_on'(determinism), CP == NCP, DCP = 0 + '$prompt_alternatives_on'(determinism), CP == NCP, DCP = 0 -> format(user_error, '.~n', []), ! @@ -818,7 +809,7 @@ number of steps. '$another', ! ), - fail + fail ; '$out_neg_answer' ). @@ -851,14 +842,14 @@ number of steps. '$clean_ifcp'(CP), NCP is NCP2-NCP1 ; - copy_term_nat(V, NV), - LGs = [], + copy_term_nat(V, NV), + LGs = [], % term_factorized(V, NV, LGs), NCP = 0 ). '$out_neg_answer' :- - ( '$undefined'(print_message(_,_),prolog) -> + ( '$undefined'(print_message(_,_),prolog) -> '$present_answer'(user_error,'false.~n') ; print_message(help,false) @@ -905,15 +896,15 @@ number of steps. fail ; C== 10 -> '$add_nl_outside_console', - ( '$undefined'(print_message(_,_),prolog) -> + ( '$undefined'(print_message(_,_),prolog) -> format(user_error,'yes~n', []) ; print_message(help,yes) ) ; - C== 13 -> + C== 13 -> get0(user_input,NC), - '$do_another'(NC) + '$do_another'(NC) ; C== -1 -> halt ; @@ -940,7 +931,7 @@ number of steps. '$write_vars_and_goals'(NLAnsw, first, FLAnsw). '$purge_dontcares'([],[]). -'$purge_dontcares'([Name=_|Vs],NVs) :- +'$purge_dontcares'([Name=_|Vs],NVs) :- atom_codes(Name, [C|_]), C is "_", !, '$purge_dontcares'(Vs,NVs). '$purge_dontcares'([V|Vs],[V|NVs]) :- @@ -948,7 +939,7 @@ number of steps. '$prep_answer_var_by_var'([], L, L). -'$prep_answer_var_by_var'([Name=Value|L], LF, L0) :- +'$prep_answer_var_by_var'([Name=Value|L], LF, L0) :- '$delete_identical_answers'(L, Value, NL, Names), '$prep_answer_var'([Name|Names], Value, LF, LI), '$prep_answer_var_by_var'(NL, LI, L0). @@ -1083,10 +1074,10 @@ is converted to: a(X) :- call(X). ~~~~~ - + */ -/** @pred call(+ _P_) is iso +/** @pred call(+ _P_) is iso Meta-call predicate. If _P_ is instantiated to an atom or a compound term, the goal `call( @@ -1094,16 +1085,16 @@ _P_)` is executed as if the clause was originally written as _P_ instead as call( _P_ ), except that any "cut" occurring in _P_ only cuts alternatives in the execution of _P_. - + */ call(G) :- '$execute'(G). -/** @pred incore(+ _P_) +/** @pred incore(+ _P_) The same as call/1. - + */ incore(G) :- '$execute'(G). @@ -1137,6 +1128,19 @@ incore(G) :- '$execute'(G). '$stop_creeping'. +/** @pred :_P_ , :_Q_ is iso, meta +Conjunction of goals (and). + +The conjunction is a fundamental construct of Prolog. Example: + +~~~~~~~ + p(X) :- q(X), r(X). +~~~~~~~ + +should be read as `p( _X_) if q( _X_) and r( _X_). + + +*/ ','(X,Y) :- yap_hacks:env_choice_point(CP), '$current_module'(M), @@ -1346,7 +1350,7 @@ bootstrap(F) :- close(Stream). '$loop'(Stream,exo) :- - prolog_flag(agc_margin,Old,0), + prolog_flag(agc_margin,Old,0), prompt1('| '), prompt(_,'| '), '$current_module'(OldModule), repeat, @@ -1355,7 +1359,7 @@ bootstrap(F) :- prolog_flag(agc_margin,_,Old), !. '$loop'(Stream,db) :- - prolog_flag(agc_margin,Old,0), + prolog_flag(agc_margin,Old,0), prompt1('| '), prompt(_,'| '), '$current_module'(OldModule), repeat, @@ -1406,9 +1410,9 @@ bootstrap(F) :- % Expanded is the final expanded term. % '$precompile_term'(Term, Expanded0, Expanded, HeadMod, BodyMod, SourceMod) :- -%format('[ ~w~n',[Term]), +%format('[ ~w~n',[Term]), '$module_expansion'(Term, Expanded0, ExpandedI, HeadMod, BodyMod, SourceMod), !, -%format(' -> ~w~n',[Expanded0]), +%format(' -> ~w~n',[Expanded0]), ( '$access_yap_flags'(9,1) /* strict_iso on */ -> @@ -1418,9 +1422,9 @@ bootstrap(F) :- '$expand_array_accesses_in_term'(ExpandedI,Expanded) ). '$precompile_term'(Term, Term, Term, _, _, _). - -/** @pred expand_term( _T_,- _X_) + +/** @pred expand_term( _T_,- _X_) @@ -1432,7 +1436,7 @@ rules: first try term_expansion/2 in the current module, and then try to use th for DCG rules is applied, together with the arithmetic optimizer whenever the compilation of arithmetic expressions is in progress. - + */ expand_term(Term,Expanded) :- ( '$do_term_expansion'(Term,Expanded) @@ -1463,8 +1467,8 @@ expand_term(Term,Expanded) :- % at each catch point I need to know: % what is ball; -% where was the previous catch -/** @pred catch( : _Goal_,+ _Exception_,+ _Action_) is iso +% where was the previous catch +/** @pred catch( : _Goal_,+ _Exception_,+ _Action_) is iso The goal `catch( _Goal_, _Exception_, _Action_)` tries to @@ -1477,7 +1481,7 @@ again throws the exception. The top-level of YAP maintains a default exception handler that is responsible to capture uncaught exceptions. - + */ catch(G, C, A) :- '$catch'(C,A,_), @@ -1506,7 +1510,7 @@ catch(G, C, A) :- % % throw has to be *exactly* after system catch! % -/** @pred throw(+ _Ball_) is iso +/** @pred throw(+ _Ball_) is iso The goal `throw( _Ball_)` throws an exception. Execution is @@ -1514,7 +1518,7 @@ stopped, and the exception is sent to the ancestor goals until reaching a matching catch/3, or until reaching top-level. @} - + */ throw(_Ball) :- % use existing ball @@ -1522,7 +1526,7 @@ throw(_Ball) :- !, '$jump_env_and_store_ball'(Ball). throw(Ball) :- - ( var(Ball) -> + ( var(Ball) -> '$do_error'(instantiation_error,throw(Ball)) ; % get current jump point @@ -1558,7 +1562,7 @@ catch_ball(C, C). '$run_toplevel_hooks' :- '$swi_current_prolog_flag'(break_level, 0 ), - recorded('$toplevel_hooks',H,_), + recorded('$toplevel_hooks',H,_), H \= fail, !, ( call(user:H1) -> true ; true). '$run_toplevel_hooks'. @@ -1576,4 +1580,3 @@ log_event( String, Args ) :- /** @} */ - diff --git a/pl/modules.yap b/pl/modules.yap index 2b7319c01..1a2a2a88e 100644 --- a/pl/modules.yap +++ b/pl/modules.yap @@ -1506,6 +1506,17 @@ import_module(Mod, ImportModule) :- import_module(Mod, EM) :- '$do_error'(type_error(atom,Mod),import_module(Mod, EM)). + +/** add_import_module( + _Module_, + _ImportModule_ , +_Pos_) is det +Add all exports in _ImportModule_ as available to _Module_. + + +All exported predicates from _ExportModule_ are made available to the + source module _ImportModule_. If _Position_ is bound to `start` the + module _ImportModule_ is tried first, if _Position_ is bound to `end`, + the module is consulted last. + +*/ add_import_module(Mod, ImportModule, Pos) :- var(Mod), '$do_error'(instantiation_error,add_import_module(Mod, ImportModule, Pos)). @@ -1526,6 +1537,14 @@ add_import_module(Mod, ImportModule, Pos) :- add_import_module(Mod, ImportModule, Pos) :- '$do_error'(domain_error(start_end,Pos),add_import_module(Mod, ImportModule, Pos)). +/** delete_import_module( + _ExportModule_, + _ImportModule_ ) is det +Exports in _ImportModule_ are no longer available to _Module_. + + +All exported predicates from _ExportModule_ are discarded from the + ones used vy the source module _ImportModule_. + +*/ delete_import_module(Mod, ImportModule) :- var(Mod), '$do_error'(instantiation_error,delete_import_module(Mod, ImportModule)). @@ -1548,6 +1567,21 @@ delete_import_module(Mod, ImportModule) :- '$set_source_module'(Source0, SourceF) :- current_module(Source0, SourceF). +/** module_property( + _Module_, ? _Property_ ) is nondet +Enumerate non-deterministically the main properties of _Module_ . + +Reports the following properties of _Module_: + + + `class`( ?_Class_ ): whether it is a `system`, `library`, or `user` module. + + + `line_count`(?_Ls_): number of lines in source file. + + + `file`(?_F_): source file for _Module_. + + + `exports`(-Es): list of all predicate symbols and + operator symbols exported or re-exported by this module. + +*/ module_property(Mod, class(L)) :- '$module_class'(Mod, L). module_property(Mod, line_count(L)) :- From c7a3836b2c7580a04ac90971b154e3ac7f87c3b5 Mon Sep 17 00:00:00 2001 From: vscosta Date: Mon, 3 Nov 2014 00:13:34 +0000 Subject: [PATCH 2/9] WIN32 support Ugh --- H/pl-incl.h | 3 + H/pl-shared.h | 2 +- configure.in | 12 +- docs/yap.md | 145 +++++++++-------- misc/mkwin | 148 +++++++++--------- misc/yap.nsi | 18 +-- packages/bdd/configure.in | 2 +- packages/cplint/Makefile.in | 1 + .../cplint/approx/simplecuddLPADs/Makefile.in | 3 + 9 files changed, 184 insertions(+), 150 deletions(-) diff --git a/H/pl-incl.h b/H/pl-incl.h index 8c3a0eb2d..093e3eba7 100755 --- a/H/pl-incl.h +++ b/H/pl-incl.h @@ -11,9 +11,12 @@ #ifdef __WINDOWS__ +#ifndef __MSYS__ #include +#endif #include + #if HAVE_XOS_H #include /* Windows POSIX enhancements */ #endif diff --git a/H/pl-shared.h b/H/pl-shared.h index baebda8ec..6c40de49d 100755 --- a/H/pl-shared.h +++ b/H/pl-shared.h @@ -23,7 +23,7 @@ #endif #ifndef __WINDOWS__ -#if defined(_MSC_VER) || defined(__MINGW32__) +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MSYS__) #define __WINDOWS__ 1 #endif #endif diff --git a/configure.in b/configure.in index 4e3d0d424..3ba69c34c 100755 --- a/configure.in +++ b/configure.in @@ -517,7 +517,8 @@ AC_PROG_INSTALL AC_PROG_RANLIB AC_CHECK_TOOL(AR,[ar],:) AC_PATH_PROG(INSTALL_INFO,install-info,true,$PATH:/sbin:/usr/sbin:/usr/etc:/usr/local/sbin) -AC_CHECK_HEADERS(winsock.h winsock2.h) +dnl do this before windows.h +AC_CHECK_HEADERS(winsock.h winsock2.h windows.h) AC_PATH_PROG(SHELL,sh) AC_CHECK_TOOL([INDENT], [indent], [:]) @@ -661,9 +662,6 @@ if test "$yap_cv_judy" != "no"; then AC_CHECK_LIB(Judy, Judy1Set,,[AC_MSG_RESULT([libJudy not found, UDI will only work with one Index at a time])]) fi -AC_CHECK_HEADERS(IntSafe.h) -AC_CHECK_HEADERS(windows.h) - if test "$threads" = yes then AC_CHECK_HEADERS(pthread.h) @@ -1091,7 +1089,7 @@ dnl Linux has both elf and a.out, in this case we found elf INSTALL_ENV="YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" fi ;; - *cyg*|*mingw*) + *cyg*|*mingw*|*msys*) # gcc on cygwin seems to have trouble with longjmp # and -fomit-frame-point -DBP_FREE YAPLIB="yap.dll" @@ -1918,11 +1916,11 @@ if test "x$PLARCH" = "x"; then *linux*) PLARCH=`echo $host | sed 's/-.*/-linux/'` ;; - i?86-*mingw32*) + i?86-*mingw32*|i?86-msys*) # Make PLARCH match the definition in src/config/win32.h PLARCH=i386-win32 ;; - x86_64-*mingw32*) + x86_64-*mingw32*|x86_64-msys*) # Make PLARCH match the definition in src/config/win64.h PLARCH=x64-win64 ;; diff --git a/docs/yap.md b/docs/yap.md index 4bf3bebe8..ecc63b32d 100644 --- a/docs/yap.md +++ b/docs/yap.md @@ -370,70 +370,91 @@ CC="gcc -mabi=64" ./configure --... Be careful. At least for some versions of `GCC`, compiling with `-g` seems to result in broken code. - + WIN32: GCC is distributed in the MINGW32 and CYGWIN packages. - -The Mingw32 environment is available from the URL: - - - -You will need to install the `msys` and `mingw` -packages. You should be able to do configure, make and make install. - -If you use mingw32 you may want to search the contributed packages for -the `gmp` multi-precision arithmetic library. If you do setup YAP -with `gmp` note that libgmp.dll must be in the path, -otherwise YAP will not be able to execute. - -The CygWin environment is available from the URL: - - - -and mirrors. We suggest using recent versions of the cygwin shell. The -compilation steps under the cygwin shell are as follows: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -mkdir cyg -$YAPSRC/configure --enable-coroutining \\ - --enable-depth-limit \\ - --enable-max-performance -make -make install -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -By default, YAP will use the `-mno-cygwin` option to -disable the use of the cygwin dll and to enable the mingw32 subsystem -instead. YAP thus will not need the cygwin dll. It instead accesses -the system's CRTDLL.DLL `C` run time library supplied with -Win32 platforms through the mingw32 interface. Note that some older -WIN95 systems may not have CRTDLL.DLL, in this case it should -be sufficient to import the file from a newer WIN95 or WIN98 machine. - -You should check the default installation path which is set to -/YAP in the standard Makefile. This string will usually -be expanded into c:\\YAP by Windows. - -The cygwin environment does not provide gmp on the MINGW -subsystem. You can fetch a dll for the gmp library from -. - -It is also possible to configure YAP to be a part of the cygwin -environment. In this case you should use: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -mkdir cyg -$YAPSRC/configure --enable-max-performance \\ - --enable-cygwin=yes -make -make install -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -YAP will then compile using the cygwin library and will be installed -in cygwin's /usr/local. You can use YAP from a cygwin console, -or as a standalone application as long as it can find -cygwin1.dll in its path. Note that you may use to use -`--enable-depth-limit` for Aleph compatibility, and that you may -want to be sure that GMP is installed. +@section Compiling_under_mingw Compiling Under MINGW's GCC +AT the time of this writing (Nov 2014), YAP uses the mkwin script to +compile in WIN32. The script requires either a WIN32 environment, or a +cross-compiler/emulator package. + +YAP has been known to compile under VISUAL C++, and should compile and +work under cygwin, but the favorite approach is to use a native +msys/mingw environment. This approach has two key advantages: + + + it does not need an interface layer and a DLL, like cygwin. + + + it enables cross-compilation. + +YAP uses rge `mkwin` script to generate a new YAP installer. The script is +controlled by a set of of variables that should be defined early on in +the text. It executes by first calling `configure`, next running `make`, and +last (if all went well) executing `nsys`. + +In more detail, the following mingw based environments have been +tested to develop YAP: + + * MSYS 1 and mingw32/64: most WIN32 development did occur in this + native environment. Best results were achieved with + MSYS-1.0.* and TDM-GCC: + + mingw: http://www.mingw.org/ + original msys: http://www.mingw.org/wiki/MSYS + mingw64: http://mingw-w64.sourceforge.net/ + TDM-GCC: http://tdm-gcc.tdragon.net/ + + * This distribution was compiled with the MSYS2 integrated + development, that supports 32 and 64 bit compilation. Setting up + MSYS2 should be done with care, but it is worth it as the + distribution works nicely in MINGW32 and MINGW64 mode. A third + compilation mode, MSYS mode, has problems with compiling sockets. + + msys2: http://sourceforge.net/projects/msys2/ + + * cygwin and cygwin64 now can generate native applications + + cygwin: https://www.cygwin.com/ + + * Linux has a nice cross-compilation environment, with some of the best + work done for Fedora. + + fedora mingw cross-compiler: http://fedoraproject.org/wiki/MinGW/CrossCompilerFramework + + One problem is that this environment requires emulation of WIN32 + executables to generate the initial saved state and to compile + `chr`. `wine` sometimes does the task, but it sometimes fails. + + * OSX has the `mxe` package, a port of mingw that is in active + development. + + mxe: http://mxe.cc/ + + Note that OSX has technical limitations that preclude porting + wine64. wine32 is distributed with package managers such as ports + and brew. + +=== Setting up WIN32 compilation + +Compiling WIN32 packages depends on a number of parameters: chosen compiler, +packages to install, directory setup. You may have to change these ones that +control the `mkwin` script: + + * `VER`: major/minor number + * `PATCHID`: third digit + * `SRC`: directory containing yap sources, in the local environment notation. + * `SRC_WIN`: same, but in WIN32 standard notation. + * `THREADS`: yes or no? controllable from the command line. + * `ABI`: "32" or "64", controllable from the command line. + * `NSIS`: installer generator, usually "/c/Program Files (x86)/NSIS/makensis". + * `DOCS_DIR`: where you have the doxygen output. + * `GCC_DIR`: root of gcc seup. + * `HOST`: argument to `--host` configure command. + * `BUILD`: build directory + * `GMP`: multi-precision package; yes, no, or the installation directory; usually in the distribution. + * `CUDD`: BDD package, usually in the distribution. + * `JAVA`: Java sdk directory, usually in the distribution. + * `PYTHON`: Python package, usually in the distribution. + * `R`: R environment package, usually in the distribution. + * `GECODE`: constraint solver package, usually not in the WIN32 distribution. @subsection Compiling_Under_Visual_C Compiling Under Visual C++ diff --git a/misc/mkwin b/misc/mkwin index 1f7f75624..885acea9a 100755 --- a/misc/mkwin +++ b/misc/mkwin @@ -14,30 +14,47 @@ # # http://sourceforge.net/projects/mingwbuilds/ # PS: don't install in the default location. -# mingw should avoid space in its directory, +# mingw should avoid space in its directory path, # it freaks winres out. # http://nsis.sourceforge.net/Main_Page # # -YHOME=/y/vsc -VERSION=6.3.4 -#cross-compiler for OSX, see http://mxe.cc/ -#notice that OSX does not allow WIN64 emulation (wine64) -MXE=$HOME/Yap/mxe/usr -# by default, compile without threads -THREADS=no -# use 64 bits -ABI=64 +for YHOME in /y/vsc /z /home/vsc /home/vitor /Users/vsc /u/vitor; +do + if test -d $YHOME/Yap + then + break + fi +done -SRC=/c/cygwin/Yap/yap-6.3 +#!/bin/sh +# +# /** +# +# assumes o mingw32/mingw64 compiler +# native sh like env: msys usually, such as +# http://msys2.sourceforge.net/ +# + +# Major and Minor +VER="6.3" +# Patch +PATCHID="4" +# SRC in the way it loks to the script +SRC=/c/cygwin/Yap/yap-"$VER" +# the way it looks to win32 +SRC_WIN="c:\\cygwin\\Yap\\yap-${VER}" #SRC=/l/work/noth/git #SRC_WIN=L:\\work\\noth\\git #SRC="$HOME"/git/yap-6.3 -TARGET=/c/Yap64 +# do we support THREADS +THREADS=no +# makes install bundle NSIS="/c/Program Files (x86)/NSIS/makensis" -# by default, "" +# emulator, by default, "" PREFIX_CMD=wine +VERSION="$VER"."$PATCHID" I=$# while test $I -gt 0 do @@ -61,16 +78,17 @@ done # srcdir comes from here, please avoid relative paths CONFIGURE="$SRC"/configure -DEBUG=" --enable-debug-yap --enable-low-level-tracer" +#DEBUG=" --enable-debug-yap --enable-low-level-tracer" +DEBUG= # debugging setup -do_compile=true -do_install=true +do_compile=yes +do_install=yes # HOME WIN64 configuration # DOCS_DIR=/l/work/noth/yapdocs -DOCS_DIR="$YHOME"/Yap/bins/threads +DOCS_DIR="$YHOME"/Yap/doxout if test "$THREADS" = yes; then FULL_VERSION="$VERSION"-threads @@ -79,94 +97,83 @@ else fi if test $ABI = 64; then - BUILD=/c/cygwin/Yap/mingw"$ABI" - #GCC_DIR=/l/Work/noth/mingw-w64/x86_64-4.9.0-posix-seh-rt_v3-rev1/mingw64 + TARGET=YAP64 case $( uname ) in *Darwin*) GCC_DIR="$MXE" HOST="x86_64-w64-mingw32" - LIB_PATH="$MXE"/"$HOST"/lib + BUILD=/c/cygwin/Yap/mingw"$ABI" ;; *MINGW64*) - GCC_DIR=/c/TDM-GCC-64 + # GCC_DIR=/l/Work/noth/mingw-w64/x86_64-4.9.0-posix-seh-rt_v3-rev1/mingw64 + # GCC_DIR=/c/TDM-GCC-64 + GCC_DIR=/c/MinGW64 HOST="x86_64-w64-mingw32" - LIB_PATH="$GCC_DIR"/"$HOST"/lib + ;; + MSYS*) + # GCC_DIR=/c/TDM-GCC-64 + GCC_DIR=/usr + HOST="x86_64-pc-msys" + BLD="--build=$HOST" ;; esac # ok. # BDD compiler package. Get version that compiles on Windows from Vitor! # GMP=/l/Work/noth/msys/1.0/local - GMP=/c/msys64/usr/win64 + GMP=yes #/c/msys64/usr/win64 CUDD=/c/cygwin/Yap/cudd-2.5.0-mingw64 GECODE=no # "/c/Program Files/Gecode" JAVA="$( echo /c/Program\ Files/Java/jdk* )" PYTHON="/c/Python33-64" R="$( echo /c/Program\ Files/R/R-*/bin/x64 )" - -fi - # HOME WIN32 configuration -if test $ABI = 32; then - ABI=32 +elif test $ABI = 32; then + TARGET=YAP case $( uname ) in *Darwin*) #use mxe as a cross compiler - GCC_DIR="$MXE"/bin - PATH="$GCC_DIR":"$PATH" + GCC_DIR="$MXE" HOST="i686-pc-mingw32" - LIB_PATH="$MXE"/"$HOST"/lib - GECODE=no # install only allows one of 32 or 64 bits - GMP=yes - JAVA=no - PYTHON=no - REAL=no + GMP=/c/msys64/usr/win32 ;; - esac - - case $( uname ) in - *Darwin*) - GCC_DIR="$MXE" - HOST="x86_64-w64-mingw32" - LIB_PATH="$MXE"/"$HOST"/lib - ;; - *MINGW64*) - GCC_DIR=/c/TDM-GCC-64 - HOST="x86_64-w64-mingw32" - LIB_PATH="$GCC_DIR"/"$HOST"/lib + *MINGW32*) + GCC_DIR=/mingw32 + HOST="i686-w64-mingw32" + GMP=yes ;; esac # ok. # BDD compiler package. Get version that compiles on Windows from Vitor! # GMP=/l/Work/noth/msys/1.0/local - GMP=/c/msys64/usr/win32 CUDD=/c/cygwin/Yap/cudd-2.5.0-mingw32 GECODE=no # "/c/Program Files/Gecode" - JAVA="$( echo /c/Program\ Files\ */Java/jdk* )" - PYTHON="/c/Python27" + JAVA="$( echo /c/Program\ Files\ *x86*/Java/jdk* )" + PYTHON="/c/Python27/DLLs" R="$( echo /c/Program\ Files/R/R-*/bin/i* )" - HOST+=" --enable-abi=32" + # HOST=" --enable-abi=32" fi export PATH="$GCC_DIR"/bin:"$PATH" # echo "gcc= " $GCC_DIR -# echo "host= " $HOST + echo "host= " $HOST if test x"$JAVA" != xno then export PATH="$PATH":"$JAVA"/bin fi if test x"$PYTHON" != xno then - export PATH="$PATH":"$PYTHON"/"python.exe" + export PATH="$PATH":"$PYTHON" fi if test x"$R" != xno then export PATH="$PATH":"$R" fi -if test ${THREADS} = yes +if test x${THREADS} != xno then - cp "$LIB_PATH"/libwinpthread-1.dll . + cp "$DLL_PATH"/libwinpthread-1.dll . + cp "$DLL_PATH=gmp*.dll . cp libwinpthread-1.dll pthreadGC2.dll fi @@ -185,7 +192,7 @@ then export PATH="$PATH":"$GECODE"/bin fi -if test "$JAVA" = yes +if test x"$JAVA" != xno then export PATH="$PATH":"$JAVA"/bin fi @@ -210,44 +217,45 @@ then make distclean fi -export INSTALL_SH=$SRC/yap-6.3/install.sh +export INSTALL_SH=$SRC/yap-"$VERSION"/install.sh # avoid using relative paths if test "$do_compile" = true; then BUILD=/c/cygwin/Yap/mingw"$ABI" mkdir -p "$BUILD" + cd "$BUILD" +# make distclean # /bin/rm -rf "$BUILD"/* - "$CONFIGURE" --host="$HOST" \ - --prefix="$TARGET" $DEBUG\ + "$CONFIGURE" --host="$HOST" "$BLD" \ + --prefix=/c/"$TARGET" $DEBUG\ --with-R="$R" \ --with-java="$JAVA" \ --with-gmp="$GMP" \ - --with-python="$PYTHON" \ + --with-python="$PYTHON"/python.exe \ --with-cudd="$CUDD" --enable-bddlib="$BDDLIB" --with-cplint="$CPLINT" \ --with-gecode="$GECODE" \ --enable-threads="$THREADS" --enable-pthread-locking make #-j 4 install fi -if test "$do_install" = true; then +if test "$do_install" = yes; then + make install + cp -a $DOCS_DIR/html /c/$TARGET/share/doc/Yap + cp $DOCS_DIR/latex/*pdf /c/$TARGET/share/doc/Yap if test $ABI = 64; then - cp $DOCS_DIR/*html $TARGET/share/doc/Yap - cp $DOCS_DIR/*pdf $TARGET/share/doc/Yap "$NSIS" -DREGKEY=SOFTWARE\\YAP\\Prolog64 \ - -DROOTDIR=$TARGET \ + -DROOTDIR=/c/$TARGET \ -DABI="$ABI" \ -DVERSION="$FULL_VERSION" \ -DOPTIONS="$SRC_WIN\\misc\\options.ini" \ -DOUT_DIR=".." -D"WIN64=1" \ - -NOCD $SRC/yap-6.3/misc/Yap.nsi + -NOCD $SRC/misc/Yap.nsi else - cp $DOCS_DIR/*html $TARGET/share/doc/Yap - cp $DOCS_DIR/*pdf $TARGET/share/doc/Yap "$NSIS" -DREGKEY=SOFTWARE\\YAP\\Prolog \ - -DROOTDIR=$TARGET \ + -DROOTDIR=/c/$TARGET\ -DABI="$ABI" \ -DVERSION="$FULL_VERSION" \ -DOPTIONS="$SRC_WIN\\misc\\options.ini" \ -DOUT_DIR=".." \ - -NOCD $SRC/yap-6.3/misc/Yap.nsi + -NOCD $SRC/misc/Yap.nsi fi fi diff --git a/misc/yap.nsi b/misc/yap.nsi index 9d0920fb0..958e5b9e5 100755 --- a/misc/yap.nsi +++ b/misc/yap.nsi @@ -14,7 +14,7 @@ SetCompressor /FINAL bzip2 ; Preload files that are needed by the installer itself ReserveFile "${NSISDIR}\Plugins\x86-unicode\UserInfo.dll" -ReserveFile "${NSISDIR}\Plugins\\x86-unicode\InstallOptions.dll" +ReserveFile "${NSISDIR}\Plugins\x86-unicode\InstallOptions.dll" ReserveFile "${OPTIONS}" !ifdef WIN64 @@ -72,8 +72,8 @@ Section "Base system (required)" File /r ${ROOTDIR}\share\Yap\* SetOutPath $INSTDIR\share\doc\Yap - File ${ROOTDIR}\share\doc\Yap\yap.html - File ${ROOTDIR}\share\doc\Yap\yap.pdf + File ${ROOTDIR}\share\doc\Yap\html\index.html +; File ${ROOTDIR}\share\doc\Yap\refman.pdf ; File ${ROOTDIR}\share\doc\Yap\yap.info File ${ROOTDIR}\share\doc\Yap\Artistic File ${ROOTDIR}\share\doc\Yap\README.TXT @@ -120,13 +120,13 @@ Section "Start Menu shortcuts" "$INSTDIR\share\doc\Yap\README.TXT" 0 \ "SW_SHOWNORMAL" "" "View readme" CreateShortCut "$SMPROGRAMS\${GRP}\Manual Html.lnk" \ - "$INSTDIR\share\doc\Yap\yap.html" "" \ - "$INSTDIR\share\doc\Yap\yap.html" 0 \ - "SW_SHOWNORMAL" "" "View readme" - CreateShortCut "$SMPROGRAMS\${GRP}\Manual PDF.lnk" \ - "$INSTDIR\share\doc\Yap\yap.pdf" "" \ - "$INSTDIR\share\doc\Yap\yap.pdf" 0 \ + "$INSTDIR\share\doc\Yap\html\index.html" "" \ + "$INSTDIR\share\doc\Yap\html\index.html" 0 \ "SW_SHOWNORMAL" "" "View readme" +; CreateShortCut "$SMPROGRAMS\${GRP}\Manual PDF.lnk" \ +; "$INSTDIR\share\doc\Yap\refman.pdf" "" \ +; "$INSTDIR\share\doc\Yap\refman.pdf" 0 \ +; "SW_SHOWNORMAL" "" "View readme" CreateShortCut "$SMPROGRAMS\${GRP}\Uninstall.lnk" \ "$INSTDIR\uninstall.exe" \ "" \ diff --git a/packages/bdd/configure.in b/packages/bdd/configure.in index 5f97280a1..d5ba8e7d2 100755 --- a/packages/bdd/configure.in +++ b/packages/bdd/configure.in @@ -50,7 +50,7 @@ elif test -d "$cudd_dir/lib"; then LIBS="$LIBS -L $cudd_dir/lib" fi -if test "$target_os" = "mingw32" -o "$target_os" = "mingw64" +if test "$target_os" = "mingw32" -o "$target_os" = "mingw64" -o "$target_os" = "msys" then #mingw: we know where things are CUDD_LIBS="$cudd_dir/lib/all_cudd.dll" diff --git a/packages/cplint/Makefile.in b/packages/cplint/Makefile.in index e462a9417..f6c778e38 100644 --- a/packages/cplint/Makefile.in +++ b/packages/cplint/Makefile.in @@ -201,3 +201,4 @@ test%: distclean: clean rm -f Makefile + diff --git a/packages/cplint/approx/simplecuddLPADs/Makefile.in b/packages/cplint/approx/simplecuddLPADs/Makefile.in index de6ccd639..d6fe321f2 100644 --- a/packages/cplint/approx/simplecuddLPADs/Makefile.in +++ b/packages/cplint/approx/simplecuddLPADs/Makefile.in @@ -52,3 +52,6 @@ clean: install: default $(INSTALL_PROGRAM) LPADBDD $(DESTDIR) + +distclean: clean + rm -f Makefile From 9d615f3c24d5997a5cdd97a284a59bd46f15bf93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 3 Nov 2014 00:25:30 +0000 Subject: [PATCH 3/9] win32 in submodules. --- packages/chr | 2 +- packages/http | 2 +- packages/real | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/chr b/packages/chr index 630f75cd5..ad55aa0e2 160000 --- a/packages/chr +++ b/packages/chr @@ -1 +1 @@ -Subproject commit 630f75cd5e97459f2c4ad51d6887a328574df923 +Subproject commit ad55aa0e2ab8362c144184270889f07a4b4fc75a diff --git a/packages/http b/packages/http index 373c30a0e..f98511b9c 160000 --- a/packages/http +++ b/packages/http @@ -1 +1 @@ -Subproject commit 373c30a0e81c72a1fa3cb28b971f075aae28b443 +Subproject commit f98511b9c0f6113a04512abad346b2ee0c399478 diff --git a/packages/real b/packages/real index e535195ee..e09cbb2a2 160000 --- a/packages/real +++ b/packages/real @@ -1 +1 @@ -Subproject commit e535195eee93bf37b99f35f8942e8e403a99e7d1 +Subproject commit e09cbb2a2980176e12c7ae6dbdcf87f8aa4ed67d From 2036ec3137670e7bd9c2a0d3420260490dca7a09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 3 Nov 2014 00:26:04 +0000 Subject: [PATCH 4/9] update config --- config.h.in | 6 +- configure | 198 ++++++++++++++++++++++++++++++---------------------- 2 files changed, 117 insertions(+), 87 deletions(-) diff --git a/config.h.in b/config.h.in index 801ddd680..1582d5f94 100644 --- a/config.h.in +++ b/config.h.in @@ -337,9 +337,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H -/* Define to 1 if you have the header file. */ -#undef HAVE_INTSAFE_H - /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H @@ -959,6 +956,9 @@ /* what is the configure host name */ #undef HOST_ALIAS +/* type of int64_t */ +#undef INT64_T_DEFINED + /* malloc_t */ #undef MALLOC_T diff --git a/configure b/configure index 2bc6b237a..2173bb01b 100755 --- a/configure +++ b/configure @@ -784,6 +784,7 @@ STARTUP_ANDROID ARCH M4GENHDRS M4 +INT64_T_DEFINED PRE_INSTALL_ENV INSTALL_ENV PKG_PRISM @@ -1941,52 +1942,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using @@ -2078,6 +2033,52 @@ fi } # ac_fn_c_check_header_mongrel +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly @@ -5606,6 +5607,19 @@ $as_echo "no" >&6; } fi +for ac_header in winsock.h winsock2.h windows.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + # Extract the first word of "sh", so it can be a program name with args. set dummy sh; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -6936,31 +6950,6 @@ fi fi -for ac_header in IntSafe.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "IntSafe.h" "ac_cv_header_IntSafe_h" "$ac_includes_default" -if test "x$ac_cv_header_IntSafe_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_INTSAFE_H 1 -_ACEOF - -fi - -done - -for ac_header in windows.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" -if test "x$ac_cv_header_windows_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WINDOWS_H 1 -_ACEOF - -fi - -done - - if test "$threads" = yes then for ac_header in pthread.h @@ -7658,7 +7647,7 @@ fi INSTALL_ENV="YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" fi ;; - *cyg*|*mingw*) + *cyg*|*mingw*|*msys*) # gcc on cygwin seems to have trouble with longjmp # and -fomit-frame-point -DBP_FREE YAPLIB="yap.dll" @@ -8277,13 +8266,12 @@ fi done -for ac_header in wctype.h winsock.h winsock2.h +for ac_header in wctype.h do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + ac_fn_c_check_header_mongrel "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" +if test "x$ac_cv_header_wctype_h" = xyes; then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_WCTYPE_H 1 _ACEOF fi @@ -8958,6 +8946,48 @@ cat >>confdefs.h <<_ACEOF _ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether int64_t is defined" >&5 +$as_echo_n "checking whether int64_t is defined... " >&6; } +if ${yap_cv_int64_t_defined+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test "$cross_compiling" = yes; then : + yap_cv_int64_t_defined=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + int main() { + int64_t i; + return 0; + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + yap_cv_int64_t_defined=yes +else + yap_cv_int64_t_defined=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $yap_cv_int64_t_defined" >&5 +$as_echo "$yap_cv_int64_t_defined" >&6; } +if test $yap_cv_int64_t_defined = yes +then + +cat >>confdefs.h <<_ACEOF +#define INT64_T_DEFINED 1 +_ACEOF + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for int64_t" >&5 +$as_echo_n "checking for int64_t... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of malloc" >&5 $as_echo_n "checking for type of malloc... " >&6; } @@ -10287,11 +10317,11 @@ if test "x$PLARCH" = "x"; then *linux*) PLARCH=`echo $host | sed 's/-.*/-linux/'` ;; - i?86-*mingw32*) + i?86-*mingw32*|i?86-msys*) # Make PLARCH match the definition in src/config/win32.h PLARCH=i386-win32 ;; - x86_64-*mingw32*) + x86_64-*mingw32*|x86_64-msys*) # Make PLARCH match the definition in src/config/win64.h PLARCH=x64-win64 ;; @@ -13063,7 +13093,7 @@ elif test -d "$cudd_dir/lib"; then LIBS="$LIBS -L $cudd_dir/lib" fi -if test "$target_os" = "mingw32" -o "$target_os" = "mingw64" +if test "$target_os" = "mingw32" -o "$target_os" = "mingw64" -o "$target_os" = "msys" then #mingw: we know where things are CUDD_LIBS="$cudd_dir/lib/all_cudd.dll" @@ -14079,7 +14109,7 @@ else JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST -/* #line 14082 "configure" */ +/* #line 14112 "configure" */ public class Test { } EOF @@ -14255,7 +14285,7 @@ EOF if uudecode$EXEEXT Test.uue; then ac_cv_prog_uudecode_base64=yes else - echo "configure: 14258: uudecode had trouble decoding base 64 file 'Test.uue'" >&5 + echo "configure: 14288: uudecode had trouble decoding base 64 file 'Test.uue'" >&5 echo "configure: failed file was:" >&5 cat Test.uue >&5 ac_cv_prog_uudecode_base64=no @@ -14386,7 +14416,7 @@ else JAVA_TEST=Test.java CLASS_TEST=Test.class cat << \EOF > $JAVA_TEST -/* #line 14389 "configure" */ +/* #line 14419 "configure" */ public class Test { } EOF @@ -14421,7 +14451,7 @@ JAVA_TEST=Test.java CLASS_TEST=Test.class TEST=Test cat << \EOF > $JAVA_TEST -/* [#]line 14424 "configure" */ +/* [#]line 14454 "configure" */ public class Test { public static void main (String args[]) { System.exit (0); From 83a34ad8498a35f5a80d217a71909b9f08fa27b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 3 Nov 2014 00:43:19 +0000 Subject: [PATCH 5/9] fix var --- misc/mkwin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/mkwin b/misc/mkwin index 885acea9a..730868c09 100755 --- a/misc/mkwin +++ b/misc/mkwin @@ -173,7 +173,7 @@ fi if test x${THREADS} != xno then cp "$DLL_PATH"/libwinpthread-1.dll . - cp "$DLL_PATH=gmp*.dll . + cp "$DLL_PATH"/gmp*.dll . cp libwinpthread-1.dll pthreadGC2.dll fi From 58734fe2e7aaad9322d819687a8d9de165719bab Mon Sep 17 00:00:00 2001 From: vscosta Date: Tue, 4 Nov 2014 01:27:58 +0000 Subject: [PATCH 6/9] win32 support - support for win graphic console - correct versioning - document mkwin script --- Makefile.in | 6 +-- console/LGPL/pl-ntmain.c | 4 +- misc/mkwin.md | 83 ++++++++++++++++++++++++++++++++++++ misc/yap.nsi | 6 +-- os/pl-stream.c | 7 +++ os/windows/uxnt.c | 2 +- packages/python/configure.in | 2 +- 7 files changed, 100 insertions(+), 10 deletions(-) create mode 100644 misc/mkwin.md diff --git a/Makefile.in b/Makefile.in index dee0f23eb..935fbc97f 100755 --- a/Makefile.in +++ b/Makefile.in @@ -511,13 +511,13 @@ JIT_Compiler.o: IT/JIT_Compiler.cpp $(CC) -c $(CFLAGS) $< -o $@ pl-ntcon.o: console/LGPL/pl-ntcon.c config.h - $(CC) -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir)/include $< -o $@ + $(CC) -c $(CFLAGS) -DUNICODE -D_UNICODE -DPL_CONSOLE=1 -I$(srcdir)/include $< -o $@ pl-ntconsole.o: console/LGPL/pl-ntconsole.c config.h - $(CC) -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir) -I$(srcdir)/include -I$(srcdir)/os @EXTRA_INCLUDES_FOR_WIN32@ $< -o $@ + $(CC) -c $(CFLAGS) -DUNICODE -D_UNICODE -DPL_CONSOLE=1 -I$(srcdir) -I$(srcdir)/include -I$(srcdir)/os @EXTRA_INCLUDES_FOR_WIN32@ $< -o $@ pl-ntmain.o: console/LGPL/pl-ntmain.c config.h - $(CC) -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir)/include -I$(srcdir) -I$(srcdir)/os @EXTRA_INCLUDES_FOR_WIN32@ $< -o $@ + $(CC) -c $(CFLAGS) -DUNICODE -D_UNICODE -DPL_CONSOLE=1 -I$(srcdir)/include -I$(srcdir) -I$(srcdir)/os @EXTRA_INCLUDES_FOR_WIN32@ $< -o $@ yapres.o: console/LGPL/yap.rc console/LGPL/manifest.xml config.h $(RC) $(RCFLAGS) -DUNICODE -D_UNICODE -DPL_CONSOLE=1 -I. -I$(srcdir)/include -I$(srcdir) -I$(srcdir)/os -I$(srcdir)/console/LGPL @EXTRA_INCLUDES_FOR_WIN32@ -i $< -o $@ diff --git a/console/LGPL/pl-ntmain.c b/console/LGPL/pl-ntmain.c index fcc30ee93..a9da3abc3 100755 --- a/console/LGPL/pl-ntmain.c +++ b/console/LGPL/pl-ntmain.c @@ -28,7 +28,7 @@ #define MAX_FILE_NAME 1024 #include "config.h" #include "console/LGPL/resource.h" -#ifdef THREADSx +#ifdef THREADS #define O_PLMT 1 #endif #else @@ -1087,7 +1087,7 @@ set_window_title(rlc_console c) int v = (int)PL_query(PL_QUERY_VERSION); int major = v / 10000; int minor = (v / 100) % 100; - int patch = v % 100; + int patch = v / 100; #ifdef O_PLMT TCHAR *mt = _T("Multi-threaded, "); #else diff --git a/misc/mkwin.md b/misc/mkwin.md new file mode 100644 index 000000000..aeeedaf61 --- /dev/null +++ b/misc/mkwin.md @@ -0,0 +1,83 @@ + +AT the time of this writing (Nov 2014), YAP uses the mkwin script to +compile in WIN32. The script requires either a WIN32 environment, or a +cross-compiler/emulator package. + +YAP has been known to compile under VISUAL C++, and should compile and +work under cygwin, but the favorite approach is to use a native +msys/mingw environment. This approach has two key advantages: + + + it does not need an interface layer and a DLL, like cygwin. + + + it enables cross-compilation. + +YAP uses rge `mkwin` script to generate a new YAP installer. The script is +controlled by a set of of variables that should be defined early on in +the text. It executes by first calling `configure`, next running `make`, and +last (if all went well) executing `nsys`. + +In more detail, the following mingw based environments have been +tested to develop YAP: + + * MSYS 1 and mingw32/64: most WIN32 development did occur in this + native environment. Best results were achieved with + MSYS-1.0.* and TDM-GCC: + + mingw: http://www.mingw.org/ + original msys: http://www.mingw.org/wiki/MSYS + mingw64: http://mingw-w64.sourceforge.net/ + TDM-GCC: http://tdm-gcc.tdragon.net/ + + * This distribution was compiled with the MSYS2 integrated + development, that supports 32 and 64 bit compilation. Setting up + MSYS2 should be done with care, but it is worth it as the + distribution works nicely in MINGW32 and MINGW64 mode. A third + compilation mode, MSYS mode, has problems with compiling sockets. + + msys2: http://sourceforge.net/projects/msys2/ + + * cygwin and cygwin64 now can generate native applications + + cygwin: https://www.cygwin.com/ + + * Linux has a nice cross-compilation environment, with some of the best + work done for Fedora. + + fedora mingw cross-compiler: http://fedoraproject.org/wiki/MinGW/CrossCompilerFramework + + One problem is that this environment requires emulation of WIN32 + executables to generate the initial saved state and to compile + `chr`. `wine` sometimes does the task, but it sometimes fails. + + * OSX has the `mxe` package, a port of mingw that is in active + development. + + mxe: http://mxe.cc/ + + Note that OSX has technical limitations that preclude porting + wine64. wine32 is distributed with package managers such as ports + and brew. + +=== Setting up WIN32 compilation + +Compiling WIN32 packages depends on a number of parameters: chosen compiler, +packages to install, directory setup. You may have to change these ones that +control the `mkwin` script: + + * `VER`: major/minor number + * `PATCHID`: third digit + * `SRC`: directory containing yap sources, in the local environment notation. + * `SRC_WIN`: same, but in WIN32 standard notation. + * `THREADS`: yes or no? controllable from the command line. + * `ABI`: "32" or "64", controllable from the command line. + * `NSIS`: installer generator, usually "/c/Program Files (x86)/NSIS/makensis". + * `DOCS_DIR`: where you have the doxygen output. + * `GCC_DIR`: root of gcc seup. + * `HOST`: argument to `--host` configure command. + * `BUILD`: build directory + * `GMP`: multi-precision package; yes, no, or the installation directory; usually in the distribution. + * `CUDD`: BDD package, usually in the distribution. + * `JAVA`: Java sdk directory, usually in the distribution. + * `PYTHON`: Python package, usually in the distribution. + * `R`: R environment package, usually in the distribution. + * `GECODE`: constraint solver package, usually not in the WIN32 distribution. \ No newline at end of file diff --git a/misc/yap.nsi b/misc/yap.nsi index 958e5b9e5..e19ed40e2 100755 --- a/misc/yap.nsi +++ b/misc/yap.nsi @@ -18,9 +18,9 @@ ReserveFile "${NSISDIR}\Plugins\x86-unicode\InstallOptions.dll" ReserveFile "${OPTIONS}" !ifdef WIN64 -InstallDir "$PROGRAMFILES64\${ROOTDIR}" +InstallDir "$PROGRAMFILES64\${TARGET}" !else -InstallDir "$PROGRAMFILES\${ROOTDIR}" +InstallDir "$PROGRAMFILES\${TARGET}" !endif InstallDirRegKey HKLM ${REGKEY} "home" @@ -72,7 +72,7 @@ Section "Base system (required)" File /r ${ROOTDIR}\share\Yap\* SetOutPath $INSTDIR\share\doc\Yap - File ${ROOTDIR}\share\doc\Yap\html\index.html + File ${ROOTDIR}\share\doc\Yap\html\* ; File ${ROOTDIR}\share\doc\Yap\refman.pdf ; File ${ROOTDIR}\share\doc\Yap\yap.info File ${ROOTDIR}\share\doc\Yap\Artistic diff --git a/os/pl-stream.c b/os/pl-stream.c index 238a520f0..0231f128a 100755 --- a/os/pl-stream.c +++ b/os/pl-stream.c @@ -886,6 +886,13 @@ put_code(int c, IOSTREAM *s) unsigned char *q = (unsigned char *)&chr; unsigned char *e = &q[sizeof(pl_wchar_t)]; +#if __WINDOWS__ + if (s == Soutput || s == Serror ) { + if (!(*s->functions->write)(s->handle, (char *)q, sizeof(wchar_t))) + return -1; + break; + } +#endif while(q Date: Tue, 4 Nov 2014 01:51:50 +0000 Subject: [PATCH 7/9] improved windows compilation script --- misc/mkwin | 85 +++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/misc/mkwin b/misc/mkwin index 730868c09..df1379ce2 100755 --- a/misc/mkwin +++ b/misc/mkwin @@ -1,4 +1,4 @@ -#!/bin/sh +# !/bin/sh # # script for compiling and installing YAP under msys. Uses a mingw64 # compiler, msys shell and nsis to do the installing @@ -27,10 +27,6 @@ do fi done -#!/bin/sh -# -# /** -# # assumes o mingw32/mingw64 compiler # native sh like env: msys usually, such as # http://msys2.sourceforge.net/ @@ -41,9 +37,9 @@ VER="6.3" # Patch PATCHID="4" # SRC in the way it loks to the script -SRC=/c/cygwin/Yap/yap-"$VER" +SRC=/c/cygwin/yap-"$VER" # the way it looks to win32 -SRC_WIN="c:\\cygwin\\Yap\\yap-${VER}" +SRC_WIN="c:\\cygwin\\yap-${VER}" #SRC=/l/work/noth/git #SRC_WIN=L:\\work\\noth\\git #SRC="$HOME"/git/yap-6.3 @@ -55,6 +51,7 @@ NSIS="/c/Program Files (x86)/NSIS/makensis" PREFIX_CMD=wine VERSION="$VER"."$PATCHID" +ABI=64 I=$# while test $I -gt 0 do @@ -64,6 +61,14 @@ do elif test $1 = no_threads then THREADS=no + elif test $1 = all + then + rm -rf /c/Yap/* + rm -rf /c/Yap64/* + "$SRC"/misc/mkwin 32 + "$SRC"/misc/mkwin 32 threads + "$SRC"/misc/mkwin 64 + "$SRC"/misc/mkwin 64 threads elif test $1 = 32 then ABI=32 @@ -74,6 +79,7 @@ do echo "received \"$1\", should be one of threads, no_threads, 32, 64" fi I=$(( $I - 1 )) + shift done # srcdir comes from here, please avoid relative paths @@ -90,12 +96,6 @@ do_install=yes # DOCS_DIR=/l/work/noth/yapdocs DOCS_DIR="$YHOME"/Yap/doxout -if test "$THREADS" = yes; then - FULL_VERSION="$VERSION"-threads -else - FULL_VERSION="$VERSION" -fi - if test $ABI = 64; then TARGET=YAP64 case $( uname ) in @@ -107,12 +107,12 @@ if test $ABI = 64; then *MINGW64*) # GCC_DIR=/l/Work/noth/mingw-w64/x86_64-4.9.0-posix-seh-rt_v3-rev1/mingw64 # GCC_DIR=/c/TDM-GCC-64 - GCC_DIR=/c/MinGW64 + GCC_DIR=/c/msys64/MinGW64 HOST="x86_64-w64-mingw32" ;; MSYS*) # GCC_DIR=/c/TDM-GCC-64 - GCC_DIR=/usr + GCC_DIR=/c/msys64 HOST="x86_64-pc-msys" BLD="--build=$HOST" ;; @@ -124,8 +124,9 @@ if test $ABI = 64; then CUDD=/c/cygwin/Yap/cudd-2.5.0-mingw64 GECODE=no # "/c/Program Files/Gecode" JAVA="$( echo /c/Program\ Files/Java/jdk* )" - PYTHON="/c/Python33-64" - R="$( echo /c/Program\ Files/R/R-*/bin/x64 )" + # "/c/Python33-64" + PYTHON=yes + R="$( echo /c/Program\ Files/R/R-*/bin/x64* )" # HOME WIN32 configuration elif test $ABI = 32; then TARGET=YAP @@ -137,7 +138,7 @@ elif test $ABI = 32; then GMP=/c/msys64/usr/win32 ;; *MINGW32*) - GCC_DIR=/mingw32 + GCC_DIR=/c/msys64/mingw32 HOST="i686-w64-mingw32" GMP=yes ;; @@ -148,15 +149,25 @@ elif test $ABI = 32; then CUDD=/c/cygwin/Yap/cudd-2.5.0-mingw32 GECODE=no # "/c/Program Files/Gecode" JAVA="$( echo /c/Program\ Files\ *x86*/Java/jdk* )" - PYTHON="/c/Python27/DLLs" + #"/c/Python27/DLLs" + PYTHON=yes R="$( echo /c/Program\ Files/R/R-*/bin/i* )" # HOST=" --enable-abi=32" - fi +if test x"$THREADS" = xyes; then + EXTRA_THREADS="-threads" +fi + +for BUILD in /c/cygwin/Yap "$HOME"/Yap/bins . +do + if test -d $BUILD; then break; fi +done +BUILD+="/mingw""$ABI""$EXTRA_THREADS" + + export PATH="$GCC_DIR"/bin:"$PATH" # echo "gcc= " $GCC_DIR - echo "host= " $HOST if test x"$JAVA" != xno then export PATH="$PATH":"$JAVA"/bin @@ -170,14 +181,6 @@ then export PATH="$PATH":"$R" fi -if test x${THREADS} != xno -then - cp "$DLL_PATH"/libwinpthread-1.dll . - cp "$DLL_PATH"/gmp*.dll . - cp libwinpthread-1.dll pthreadGC2.dll -fi - - if test $CUDD != no then BDDLIB="yes" @@ -212,15 +215,10 @@ then export PATH="$PATH":"$R" fi -if test do_compile = true -then - make distclean -fi - export INSTALL_SH=$SRC/yap-"$VERSION"/install.sh + # avoid using relative paths -if test "$do_compile" = true; then - BUILD=/c/cygwin/Yap/mingw"$ABI" +if test "$do_compile" = yes; then mkdir -p "$BUILD" cd "$BUILD" # make distclean @@ -241,19 +239,26 @@ if test "$do_install" = yes; then make install cp -a $DOCS_DIR/html /c/$TARGET/share/doc/Yap cp $DOCS_DIR/latex/*pdf /c/$TARGET/share/doc/Yap + + DLL_PATH="$GCC_DIR"/bin + + cp "$DLL_PATH"/libwinpthread-1.dll /c/"$TARGET"/bin + cp "$DLL_PATH"/libgmp*.dll /c/"$TARGET"/bin + cp /c/"$TARGET"/bin/libwinpthread-1.dll /c/"$TARGET"/bin/pthreadGC2.dll + if test $ABI = 64; then "$NSIS" -DREGKEY=SOFTWARE\\YAP\\Prolog64 \ - -DROOTDIR=/c/$TARGET \ + -DROOTDIR=/c/$TARGET -DTARGET="$TARGET""$EXTRA_THREADS" \ -DABI="$ABI" \ - -DVERSION="$FULL_VERSION" \ + -DVERSION="$VERSION""$EXTRA_THREADS" \ -DOPTIONS="$SRC_WIN\\misc\\options.ini" \ -DOUT_DIR=".." -D"WIN64=1" \ -NOCD $SRC/misc/Yap.nsi else "$NSIS" -DREGKEY=SOFTWARE\\YAP\\Prolog \ - -DROOTDIR=/c/$TARGET\ + -DROOTDIR=/c/$TARGET -DTARGET="$TARGET""$EXTRA_THREADS" \ -DABI="$ABI" \ - -DVERSION="$FULL_VERSION" \ + -DVERSION="$VERSION""$EXTRA_THREADS" \ -DOPTIONS="$SRC_WIN\\misc\\options.ini" \ -DOUT_DIR=".." \ -NOCD $SRC/misc/Yap.nsi From 605dd2abc12413ab995844436a8a28954be3001c Mon Sep 17 00:00:00 2001 From: vscosta Date: Wed, 5 Nov 2014 07:43:48 +0000 Subject: [PATCH 8/9] add pointer to commons. --- Makefile.in | 1 + PrologCommons/PROLOGCOMMONS.md | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 PrologCommons/PROLOGCOMMONS.md diff --git a/Makefile.in b/Makefile.in index 935fbc97f..2ec93df47 100755 --- a/Makefile.in +++ b/Makefile.in @@ -667,6 +667,7 @@ install_common: install_startup mkdir -p $(DESTDIR)$(SHAREDIR) mkdir -p $(DESTDIR)$(SHAREDIR)/Yap mkdir -p $(DESTDIR)$(SHAREDIR)/PrologCommons + $(INSTALL) $(srcdir)/PrologCommons/PROLOGCOMMONS.md $(DESTDIR)$(SHAREDIR)/PrologCommons mkdir -p $(DESTDIR)$(SHAREDIR)/Yap/pl mkdir -p $(DESTDIR)$(DOCSDIR) mkdir -p $(DESTDIR)$(INCLUDEDIR) diff --git a/PrologCommons/PROLOGCOMMONS.md b/PrologCommons/PROLOGCOMMONS.md new file mode 100644 index 000000000..a2d50cd9d --- /dev/null +++ b/PrologCommons/PROLOGCOMMONS.md @@ -0,0 +1,8 @@ + +This directory should hold files from the Prolog Commons +project. Please see + + http://prolog-commons.org + +for detailed information on the Prolog Commons initiative. + From c633eac236181ed96343c0865d70743c6235bd45 Mon Sep 17 00:00:00 2001 From: vscosta Date: Wed, 5 Nov 2014 07:45:36 +0000 Subject: [PATCH 9/9] avoid using registry, clean-up --- C/save.c | 1 - C/sysbits.c | 162 ++++++++++++++++++++++++++------------------------- H/Yapproto.h | 1 - misc/yap.nsi | 13 ++--- pl/absf.yap | 16 ++++- 5 files changed, 101 insertions(+), 92 deletions(-) diff --git a/C/save.c b/C/save.c index a424f80b3..03bb74554 100755 --- a/C/save.c +++ b/C/save.c @@ -1820,7 +1820,6 @@ Restore(char *s, char *lib_dir USES_REGS) initIO(); /* reset time */ Yap_ReInitWallTime(); - Yap_InitSysPath(); #if USE_DL_MALLOC || USE_SYSTEM_MALLOC if (!AuxSp) { Yap_InitPreAllocCodeSpace( 0 ); diff --git a/C/sysbits.c b/C/sysbits.c index a240780eb..c5c076f59 100644 --- a/C/sysbits.c +++ b/C/sysbits.c @@ -116,7 +116,7 @@ static int chdir(char *); void exit(int); -#ifdef _WIN32 +#ifdef __WINDOWS__ void Yap_WinError(char *yap_error) { @@ -211,119 +211,120 @@ Yap_dir_separator (int ch) char *libdir = NULL; #endif -void -Yap_InitSysPath(void) { +static Int +initSysPath(Term tlib, Term tcommons) { CACHE_REGS int len; int dir_done = FALSE; int commons_done = FALSE; -#if _MSC_VER || defined(__MINGW32__) + Int rcl, rcc; + +#if _MSC_VER || defined(__MINGW32__) || defined(__MSYS__) { char *dir; if ((dir = Yap_RegistryGetString("library")) && is_directory(dir)) { - Yap_PutValue(AtomSystemLibraryDir, - MkAtomTerm(Yap_LookupAtom(dir))); - dir_done = TRUE; + if (! Yap_unify( tlib, + MkAtomTerm(Yap_LookupAtom(dir))) ) + return FALSE; } if ((dir = Yap_RegistryGetString("prolog_commons")) && is_directory(dir)) { - Yap_PutValue(AtomPrologCommonsDir, - MkAtomTerm(Yap_LookupAtom(dir))); - commons_done = TRUE; + if (! Yap_unify( tcommons, + MkAtomTerm(Yap_LookupAtom(dir))) ) + return FALSE; } } if (dir_done && commons_done) - return; + return rcl && rcc; #endif strncpy(LOCAL_FileNameBuf, YAP_SHAREDIR, YAP_FILENAME_MAX); - if (is_directory(LOCAL_FileNameBuf)) { - strncat(LOCAL_FileNameBuf,"/", YAP_FILENAME_MAX); - len = strlen(LOCAL_FileNameBuf); + strncat(LOCAL_FileNameBuf,"/", YAP_FILENAME_MAX); + len = strlen(LOCAL_FileNameBuf); + if (!dir_done) { strncat(LOCAL_FileNameBuf, "Yap", YAP_FILENAME_MAX); -#if _MSC_VER || defined(__MINGW32__) - if (!dir_done && is_directory(LOCAL_FileNameBuf)) -#endif + if (is_directory(LOCAL_FileNameBuf)) { - Yap_PutValue(AtomSystemLibraryDir, - MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))); -#if _MSC_VER || defined(__MINGW32__) - dir_done = TRUE; - return; -#endif + if (! Yap_unify( tlib, + MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))) ) + return FALSE; } -#if _MSC_VER || defined(__MINGW32__) - if (!commons_done) -#endif - { - LOCAL_FileNameBuf[len] = '\0'; - strncat(LOCAL_FileNameBuf, "PrologCommons", YAP_FILENAME_MAX); - if (is_directory(LOCAL_FileNameBuf)) - Yap_PutValue(AtomPrologCommonsDir, - MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))); -#if _MSC_VER || defined(__MINGW32__) - commons_done = TRUE; -#endif + } + if (!commons_done) { + LOCAL_FileNameBuf[len] = '\0'; + strncat(LOCAL_FileNameBuf, "PrologCommons", YAP_FILENAME_MAX); + if (is_directory(LOCAL_FileNameBuf)) { + if (! Yap_unify( tcommons, + MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))) ) + return FALSE; } } if (dir_done && commons_done) - return; + return rcl && rcc; -#if _MSC_VER || defined(__MINGW32__) +#if __WINDOWS__ { size_t buflen; char *pt; - - /* couldn't find it where it was supposed to be, - let's try using the executable */ - if (!GetModuleFileName( NULL, LOCAL_FileNameBuf, YAP_FILENAME_MAX)) { - Yap_Error(OPERATING_SYSTEM_ERROR, TermNil, "could not find executable name"); + + /* couldn't find it where it was supposed to be, + let's try using the executable */ + if (!GetModuleFileName( NULL, LOCAL_FileNameBuf, YAP_FILENAME_MAX)) { + Yap_WinError( "could not find executable name" ); + /* do nothing */ + return FALSE; + } + buflen = strlen(LOCAL_FileNameBuf); + pt = LOCAL_FileNameBuf+buflen; + while (*--pt != '\\') { + /* skip executable */ + if (pt == LOCAL_FileNameBuf) { + Yap_Error(OPERATING_SYSTEM_ERROR, TermNil, "could not find executable name"); /* do nothing */ - return; + return FALSE; } - buflen = strlen(LOCAL_FileNameBuf); - pt = LOCAL_FileNameBuf+buflen; - while (*--pt != '\\') { - /* skip executable */ - if (pt == LOCAL_FileNameBuf) { - Yap_Error(OPERATING_SYSTEM_ERROR, TermNil, "could not find executable name"); - /* do nothing */ - return; - } + } + while (*--pt != '\\') { + /* skip parent directory "bin\\" */ + if (pt == LOCAL_FileNameBuf) { + Yap_Error(OPERATING_SYSTEM_ERROR, TermNil, "could not find executable name"); + /* do nothing */ + return FALSE; } - while (*--pt != '\\') { - /* skip parent directory "bin\\" */ - if (pt == LOCAL_FileNameBuf) { - Yap_Error(OPERATING_SYSTEM_ERROR, TermNil, "could not find executable name"); - /* do nothing */ - } - } - /* now, this is a possible location for the ROOT_DIR, let's look for a share directory here */ - pt[1] = '\0'; - /* grosse */ - strncat(LOCAL_FileNameBuf,"lib\\Yap",YAP_FILENAME_MAX); - libdir = Yap_AllocCodeSpace(strlen(LOCAL_FileNameBuf)+1); - strncpy(libdir, LOCAL_FileNameBuf, strlen(LOCAL_FileNameBuf)+1); - pt[1] = '\0'; - strncat(LOCAL_FileNameBuf,"share",YAP_FILENAME_MAX); + } + /* now, this is a possible location for the ROOT_DIR, let's look for a share directory here */ + pt[1] = '\0'; + /* grosse */ + strncat(LOCAL_FileNameBuf,"lib\\Yap",YAP_FILENAME_MAX); + libdir = Yap_AllocCodeSpace(strlen(LOCAL_FileNameBuf)+1); + strncpy(libdir, LOCAL_FileNameBuf, strlen(LOCAL_FileNameBuf)+1); + pt[1] = '\0'; + strncat(LOCAL_FileNameBuf,"share",YAP_FILENAME_MAX); } strncat(LOCAL_FileNameBuf,"\\", YAP_FILENAME_MAX); len = strlen(LOCAL_FileNameBuf); strncat(LOCAL_FileNameBuf, "Yap", YAP_FILENAME_MAX); - if (!dir_done && is_directory(LOCAL_FileNameBuf)) - { - Yap_PutValue(AtomSystemLibraryDir, - MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))); - } - if (!commons_done) - { - LOCAL_FileNameBuf[len] = '\0'; - strncat(LOCAL_FileNameBuf, "PrologCommons", YAP_FILENAME_MAX); - if (is_directory(LOCAL_FileNameBuf)) - Yap_PutValue(AtomPrologCommonsDir, - MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))); - } + if (!dir_done && is_directory(LOCAL_FileNameBuf)) { + if (! Yap_unify( tlib, + MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))) ) + return FALSE; + } + LOCAL_FileNameBuf[len] = '\0'; + strncat(LOCAL_FileNameBuf, "PrologCommons", YAP_FILENAME_MAX); + if (!commons_done && is_directory(LOCAL_FileNameBuf)) { + if (! Yap_unify( tcommons, + MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf))) ) + return FALSE; + } #endif + return dir_done && commons_done; +} + + +static Int +p_libraries_path( USES_REGS1 ) +{ + return initSysPath( ARG1, ARG2 ); } static Int @@ -3030,6 +3031,7 @@ Yap_InitSysPreds(void) Yap_InitCPred ("release_random_state", 1, p_release_random_state, SafePredFlag); #endif Yap_InitCPred ("log_event", 1, p_log_event, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("library_directories", 2, p_libraries_path, SafePredFlag); Yap_InitCPred ("sh", 0, p_sh, SafePredFlag|SyncPredFlag); Yap_InitCPred ("$shell", 1, p_shell, SafePredFlag|SyncPredFlag|UserCPredFlag); Yap_InitCPred ("system", 1, p_system, SafePredFlag|SyncPredFlag|UserCPredFlag); diff --git a/H/Yapproto.h b/H/Yapproto.h index a624f2be0..7d3ed09c0 100755 --- a/H/Yapproto.h +++ b/H/Yapproto.h @@ -370,7 +370,6 @@ UInt Yap_cputime(void); Int Yap_walltime(void); int Yap_dir_separator(int); int Yap_volume_header(char *); -void Yap_InitSysPath(void); int Yap_signal_index(const char *); #ifdef MAC void Yap_SetTextFile(char *); diff --git a/misc/yap.nsi b/misc/yap.nsi index e19ed40e2..5256a95c4 100755 --- a/misc/yap.nsi +++ b/misc/yap.nsi @@ -71,21 +71,18 @@ Section "Base system (required)" ; SYSTEM STUFF File /r ${ROOTDIR}\share\Yap\* + SetOutPath $INSTDIR\share\PrologCommons +; SYSTEM STUFF + File /r ${ROOTDIR}\share\PrologCommons + SetOutPath $INSTDIR\share\doc\Yap - File ${ROOTDIR}\share\doc\Yap\html\* + File /r ${ROOTDIR}\share\doc\Yap\html\* ; File ${ROOTDIR}\share\doc\Yap\refman.pdf ; File ${ROOTDIR}\share\doc\Yap\yap.info File ${ROOTDIR}\share\doc\Yap\Artistic File ${ROOTDIR}\share\doc\Yap\README.TXT File ${ROOTDIR}\share\doc\Yap\COPYING - WriteRegStr HKLM ${REGKEY} "home" "$INSTDIR" - WriteRegStr HKLM ${REGKEY} "bin" "$INSTDIR\bin\yap.exe" - WriteRegStr HKLM ${REGKEY} "dlls" "$INSTDIR\lib\Yap" - WriteRegStr HKLM ${REGKEY} "startup" "$INSTDIR\lib\Yap\startup.yss" - WriteRegStr HKLM ${REGKEY} "library" "$INSTDIR\share\Yap" - WriteRegStr HKLM ${REGKEY} "commons" "$INSTDIR\share\PrologCommons" - ; Write uninstaller !ifdef WIN64 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\YAP64" "DisplayName" "YAP64 (remove only)" diff --git a/pl/absf.yap b/pl/absf.yap index 880549bb2..8c6fae65a 100755 --- a/pl/absf.yap +++ b/pl/absf.yap @@ -538,21 +538,33 @@ remove_from_path(New) :- '$check_path'(New,Path), `library( _File_ )` are searched by the predicates consult/1, reconsult/1, use_module/1, ensure_loaded/1, and load_files/2. + This directory is initialized through the system predicate + library_directories/2. */ :- multifile user:library_directory/1. :- dynamic user:library_directory/1. -/** - @pred user:commons_directory(?Directory:atom) is nondet, dynamic +user:library_directory( Path ):- + library_directories( Path, _ ). +/** + @pred user:commons_directory(? _Directory_:atom) is nondet, dynamic + + State the location of the Commons Prolog Initiative. + + This directory is initialized through the system predicate + library_directories/2. */ :- multifile user:commons_directory/1. :- dynamic user:commons_directory/1. +user:commons_directory( Path ):- + library_directories( _, Path ). + /** @pred user:prolog_file_type(?Suffix:atom, ?Handler:atom) is nondet, dynamic